#include <iostream>
#include <string>

using namespace std;

/*
    和正常使用 变量没什么太大的区别
*/

int main(int argc, const char *argv[])
{
    int val_1 = 10;  // 定义一个整型变量 val_1，并初始化为 10
    int val_2 = 20;  // 定义一个整型变量 val_2，并初始化为 20

    int *ptr_1 = &val_1;  // 定义一个指针 ptr_1，存储 val_1 的地址
    int *ptr_2 = &val_2;  // 定义一个指针 ptr_2，存储 val_2 的地址

    int *&qtr = ptr_1;  // 定义一个指针引用 qtr，它是 ptr_1 的引用
    // 这里 qtr 是一个引用，它引用了指针 ptr_1，所以 qtr 和 ptr_1 实际上指向同一个对象，即 val_1 的地址

    qtr = ptr_2;  // 让 qtr 引用的指针（也就是 ptr_1）指向 ptr_2 所指向的对象，即 val_2
    // 现在 ptr_1 和 qtr 都指向 val_2，因为 qtr 是 ptr_1 的引用，修改 qtr 实际上修改了 ptr_1

    cout << *qtr << endl;  // 输出 qtr 所指向的对象的值，即 val_2 的值，为 20
}